'use strict';

module.exports = () => {
  return async (ctx, next) => {
    const { app, socket } = ctx;
    const id = socket.id;
    const nsp = app.io.of('/chat');
    const { room } = socket.handshake.query;

    // 房间组
    const rooms = [ room ];

    // 用户加入
    socket.join(room);

    // 在线列表
    nsp.adapter.clients(rooms, (err, clients) => {

      socket.emit('currentSocket', {
        current: id,
      });

      // 更新在线用户列表
      nsp.to(room).emit('numberChange', {
        clients,
        type: 'push',
      });
    });

    await next();

    // 在线列表
    nsp.adapter.clients(rooms, (err, clients) => {

      // 更新在线用户列表
      nsp.to(room).emit('numberChange', {
        clients,
        type: 'pop',
      });
    });
  };
};

